package com.bigdata.spark.core.rdd.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * @author : ranzlupup
 * @date : 2023/3/1 16:14
 */
object RDD_Transform_flatMap {
    def main(args: Array[String]): Unit = {
        val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
        val sparkContext: SparkContext = new SparkContext(sparkConf)
        val RDD1: RDD[List[Int]] = sparkContext.makeRDD(List(List(1, 2, 3, 4), List(5, 6, 7, 8)))
        val RDD2: RDD[String] = sparkContext.makeRDD(List("Hello Spark", "Hello Scala"))
        val RDD3: RDD[Any] = sparkContext.makeRDD(List(List(1, 2, 3, 4), 9, List(5, 6, 7, 8)))

        // TODO RDD转换算子
        //      Value类型
        //      flatMap

        RDD1.flatMap(
            (list: Seq[Int]) =>
                list
        ).collect().foreach(println)

        RDD2.flatMap(
            (str: String) => {
                str.split(" ")
            }
        ).collect().foreach(println)

        //        RDD3.flatMap(
        //            data => {
        //                data match {
        //                    case list: List[_] => list
        //                    case dat: Int => List(dat)
        //                }
        //            }
        //        ).collect().foreach(println)

        RDD3.flatMap {
            case list: List[_] => list
            case dat: Int => List(dat)
        }.collect().foreach(println)

        sparkContext.stop()
    }

}
